{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# kaggle泰坦尼克之灾"
   ]
  },
  {
   "cell_type": "raw",
   "metadata": {},
   "source": [
    "步骤:\n",
    "一.导入数据包与数据集\n",
    "\n",
    "二.数据分析\n",
    "1.总体预览:了解每列数据的含义,数据的格式等\n",
    "2..数据初步分析,使用统计学与绘图:初步了解数据之间的相关性,为构造特征工程以及模型建立做准备\n",
    "\n",
    "三.特征工程\n",
    "1.根据业务,常识,以及第二步的数据分析构造特征工程.\n",
    "2.将特征转换为模型可以辨别的类型(如处理缺失值,处理文本进行等)\n",
    "\n",
    "四.模型选择\n",
    "1.根据目标函数确定学习类型,是无监督学习还是监督学习,是分类问题还是回归问题等.\n",
    "2.比较各个模型的分数,然后取效果较好的模型作为基础模型.\n",
    "\n",
    "五.修改特征和模型参数\n",
    "1.可以通过添加或者修改特征,提高模型的上限.\n",
    "2.通过修改模型的参数,是模型逼近上限"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 一.导入数据包与数据集"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 导入相关数据包\n",
    "import numpy as np\n",
    "import pandas as pd\n",
    "import seaborn as sns\n",
    "import matplotlib.pyplot as plt\n",
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "root_path = '/opt/git/kaggle/datasets/getting-started/titanic/input'\n",
    "\n",
    "train = pd.read_csv('%s/%s' % (root_path, 'train.csv'))\n",
    "test = pd.read_csv('%s/%s' % (root_path, 'test.csv'))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 二.数据分析"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 1.总体预览\n",
    "了解每列数据的含义,数据的格式等"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>PassengerId</th>\n",
       "      <th>Survived</th>\n",
       "      <th>Pclass</th>\n",
       "      <th>Name</th>\n",
       "      <th>Sex</th>\n",
       "      <th>Age</th>\n",
       "      <th>SibSp</th>\n",
       "      <th>Parch</th>\n",
       "      <th>Ticket</th>\n",
       "      <th>Fare</th>\n",
       "      <th>Cabin</th>\n",
       "      <th>Embarked</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>Braund, Mr. Owen Harris</td>\n",
       "      <td>male</td>\n",
       "      <td>22.0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>A/5 21171</td>\n",
       "      <td>7.2500</td>\n",
       "      <td>NaN</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>Cumings, Mrs. John Bradley (Florence Briggs Th...</td>\n",
       "      <td>female</td>\n",
       "      <td>38.0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>PC 17599</td>\n",
       "      <td>71.2833</td>\n",
       "      <td>C85</td>\n",
       "      <td>C</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>3</td>\n",
       "      <td>1</td>\n",
       "      <td>3</td>\n",
       "      <td>Heikkinen, Miss. Laina</td>\n",
       "      <td>female</td>\n",
       "      <td>26.0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>STON/O2. 3101282</td>\n",
       "      <td>7.9250</td>\n",
       "      <td>NaN</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>4</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>Futrelle, Mrs. Jacques Heath (Lily May Peel)</td>\n",
       "      <td>female</td>\n",
       "      <td>35.0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>113803</td>\n",
       "      <td>53.1000</td>\n",
       "      <td>C123</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>5</td>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>Allen, Mr. William Henry</td>\n",
       "      <td>male</td>\n",
       "      <td>35.0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>373450</td>\n",
       "      <td>8.0500</td>\n",
       "      <td>NaN</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   PassengerId  Survived  Pclass  \\\n",
       "0            1         0       3   \n",
       "1            2         1       1   \n",
       "2            3         1       3   \n",
       "3            4         1       1   \n",
       "4            5         0       3   \n",
       "\n",
       "                                                Name     Sex   Age  SibSp  \\\n",
       "0                            Braund, Mr. Owen Harris    male  22.0      1   \n",
       "1  Cumings, Mrs. John Bradley (Florence Briggs Th...  female  38.0      1   \n",
       "2                             Heikkinen, Miss. Laina  female  26.0      0   \n",
       "3       Futrelle, Mrs. Jacques Heath (Lily May Peel)  female  35.0      1   \n",
       "4                           Allen, Mr. William Henry    male  35.0      0   \n",
       "\n",
       "   Parch            Ticket     Fare Cabin Embarked  \n",
       "0      0         A/5 21171   7.2500   NaN        S  \n",
       "1      0          PC 17599  71.2833   C85        C  \n",
       "2      0  STON/O2. 3101282   7.9250   NaN        S  \n",
       "3      0            113803  53.1000  C123        S  \n",
       "4      0            373450   8.0500   NaN        S  "
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train.head(5)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "RangeIndex: 891 entries, 0 to 890\n",
      "Data columns (total 12 columns):\n",
      "PassengerId    891 non-null int64\n",
      "Survived       891 non-null int64\n",
      "Pclass         891 non-null int64\n",
      "Name           891 non-null object\n",
      "Sex            891 non-null object\n",
      "Age            714 non-null float64\n",
      "SibSp          891 non-null int64\n",
      "Parch          891 non-null int64\n",
      "Ticket         891 non-null object\n",
      "Fare           891 non-null float64\n",
      "Cabin          204 non-null object\n",
      "Embarked       889 non-null object\n",
      "dtypes: float64(2), int64(5), object(5)\n",
      "memory usage: 83.6+ KB\n"
     ]
    }
   ],
   "source": [
    "# 返回每列列名,该列非nan值个数,以及该列类型\n",
    "train.info()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "RangeIndex: 418 entries, 0 to 417\n",
      "Data columns (total 11 columns):\n",
      "PassengerId    418 non-null int64\n",
      "Pclass         418 non-null int64\n",
      "Name           418 non-null object\n",
      "Sex            418 non-null object\n",
      "Age            332 non-null float64\n",
      "SibSp          418 non-null int64\n",
      "Parch          418 non-null int64\n",
      "Ticket         418 non-null object\n",
      "Fare           417 non-null float64\n",
      "Cabin          91 non-null object\n",
      "Embarked       418 non-null object\n",
      "dtypes: float64(2), int64(4), object(5)\n",
      "memory usage: 36.0+ KB\n"
     ]
    }
   ],
   "source": [
    "test.info()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>PassengerId</th>\n",
       "      <th>Survived</th>\n",
       "      <th>Pclass</th>\n",
       "      <th>Age</th>\n",
       "      <th>SibSp</th>\n",
       "      <th>Parch</th>\n",
       "      <th>Fare</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>count</th>\n",
       "      <td>891.000000</td>\n",
       "      <td>891.000000</td>\n",
       "      <td>891.000000</td>\n",
       "      <td>714.000000</td>\n",
       "      <td>891.000000</td>\n",
       "      <td>891.000000</td>\n",
       "      <td>891.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>mean</th>\n",
       "      <td>446.000000</td>\n",
       "      <td>0.383838</td>\n",
       "      <td>2.308642</td>\n",
       "      <td>29.699118</td>\n",
       "      <td>0.523008</td>\n",
       "      <td>0.381594</td>\n",
       "      <td>32.204208</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>std</th>\n",
       "      <td>257.353842</td>\n",
       "      <td>0.486592</td>\n",
       "      <td>0.836071</td>\n",
       "      <td>14.526497</td>\n",
       "      <td>1.102743</td>\n",
       "      <td>0.806057</td>\n",
       "      <td>49.693429</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>min</th>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.420000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>25%</th>\n",
       "      <td>223.500000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>2.000000</td>\n",
       "      <td>20.125000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>7.910400</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>50%</th>\n",
       "      <td>446.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>3.000000</td>\n",
       "      <td>28.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>14.454200</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>75%</th>\n",
       "      <td>668.500000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>3.000000</td>\n",
       "      <td>38.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>31.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>max</th>\n",
       "      <td>891.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>3.000000</td>\n",
       "      <td>80.000000</td>\n",
       "      <td>8.000000</td>\n",
       "      <td>6.000000</td>\n",
       "      <td>512.329200</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "       PassengerId    Survived      Pclass         Age       SibSp  \\\n",
       "count   891.000000  891.000000  891.000000  714.000000  891.000000   \n",
       "mean    446.000000    0.383838    2.308642   29.699118    0.523008   \n",
       "std     257.353842    0.486592    0.836071   14.526497    1.102743   \n",
       "min       1.000000    0.000000    1.000000    0.420000    0.000000   \n",
       "25%     223.500000    0.000000    2.000000   20.125000    0.000000   \n",
       "50%     446.000000    0.000000    3.000000   28.000000    0.000000   \n",
       "75%     668.500000    1.000000    3.000000   38.000000    1.000000   \n",
       "max     891.000000    1.000000    3.000000   80.000000    8.000000   \n",
       "\n",
       "            Parch        Fare  \n",
       "count  891.000000  891.000000  \n",
       "mean     0.381594   32.204208  \n",
       "std      0.806057   49.693429  \n",
       "min      0.000000    0.000000  \n",
       "25%      0.000000    7.910400  \n",
       "50%      0.000000   14.454200  \n",
       "75%      0.000000   31.000000  \n",
       "max      6.000000  512.329200  "
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 返回数值型变量的统计量\n",
    "# train.describe(percentiles=[0.00, 0.25, 0.5, 0.75, 1.00])\n",
    "train.describe()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 2..数据初步分析,使用统计学与绘图\n",
    "目的:初步了解数据之间的相关性,为构造特征工程以及模型建立做准备"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0    549\n",
       "1    342\n",
       "Name: Survived, dtype: int64"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 存活人数\n",
    "train['Survived'].value_counts()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 1)数值型数据协方差,corr()函数\n",
    "来个总览,快速了解个数据的相关性"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Survived</th>\n",
       "      <th>Pclass</th>\n",
       "      <th>Age</th>\n",
       "      <th>SibSp</th>\n",
       "      <th>Parch</th>\n",
       "      <th>Fare</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>Survived</th>\n",
       "      <td>1.000000</td>\n",
       "      <td>-0.338481</td>\n",
       "      <td>-0.077221</td>\n",
       "      <td>-0.035322</td>\n",
       "      <td>0.081629</td>\n",
       "      <td>0.257307</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Pclass</th>\n",
       "      <td>-0.338481</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>-0.369226</td>\n",
       "      <td>0.083081</td>\n",
       "      <td>0.018443</td>\n",
       "      <td>-0.549500</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Age</th>\n",
       "      <td>-0.077221</td>\n",
       "      <td>-0.369226</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>-0.308247</td>\n",
       "      <td>-0.189119</td>\n",
       "      <td>0.096067</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>SibSp</th>\n",
       "      <td>-0.035322</td>\n",
       "      <td>0.083081</td>\n",
       "      <td>-0.308247</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.414838</td>\n",
       "      <td>0.159651</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Parch</th>\n",
       "      <td>0.081629</td>\n",
       "      <td>0.018443</td>\n",
       "      <td>-0.189119</td>\n",
       "      <td>0.414838</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.216225</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Fare</th>\n",
       "      <td>0.257307</td>\n",
       "      <td>-0.549500</td>\n",
       "      <td>0.096067</td>\n",
       "      <td>0.159651</td>\n",
       "      <td>0.216225</td>\n",
       "      <td>1.000000</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "          Survived    Pclass       Age     SibSp     Parch      Fare\n",
       "Survived  1.000000 -0.338481 -0.077221 -0.035322  0.081629  0.257307\n",
       "Pclass   -0.338481  1.000000 -0.369226  0.083081  0.018443 -0.549500\n",
       "Age      -0.077221 -0.369226  1.000000 -0.308247 -0.189119  0.096067\n",
       "SibSp    -0.035322  0.083081 -0.308247  1.000000  0.414838  0.159651\n",
       "Parch     0.081629  0.018443 -0.189119  0.414838  1.000000  0.216225\n",
       "Fare      0.257307 -0.549500  0.096067  0.159651  0.216225  1.000000"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 相关性协方差表,corr()函数,返回结果接近0说明无相关性,大于0说明是正相关,小于0是负相关.\n",
    "train_corr = train.drop('PassengerId',axis=1).corr()\n",
    "train_corr"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n2lAzxvQFdllr25duX4NvfNp2YL3fsxMRERFpwGPUjnVngheBQgBjzFnAo8BsIAOY6d/URERERBq2\nY3V9uq21aaXP/wDMtNbOAeYYY9b6NzURERERNEbtKNzGGI+1thgYDIz5De8VEREROX4NuOvzWI2t\nt4GvjDH7gTxgKYAxphO+7k8RERER8ZOjNtSstY8YYxYBccB8a+3BmZ8u4FZ/JyciIiKirs+jsNYu\nq+K1jdX9gGm97/utOclh7l79cKBTqBce6nNvoFOo80aFZgY6hXohNzc40CnUeTevCwl0CvXCO4FO\nQI5J48xERETE2RpwRe1Yy3OIiIiISICooiYiIiLOVjZEvuFRRU1ERETEoVRRExEREWfTGDURERER\ncRpV1ERERMTZVFETEREREadRRU1EREScrQHf61MVNRERERGHUkVNREREnE1j1ERERETEaVRRExER\nEWfTnQlERERExGlUURMRERFn0xg1EREREXEaVdRERETE2RpwRU0NNREREXE2LXgrIiIiIk6jipqI\niIg4mvVqeQ4RERERcRhV1ERERMTZGvBkAlXURERERBxKFTURERFxNs36FBERERGnUUVNREREnE2z\nPkVERETEaVRRExEREWfTrE8RERERcRpV1ERERMTZVFETEREREadRRU1ERESczWrWp4iIiIg4jCpq\nIiIi4mwaoyYiIiIiTtMgKmrDHhxNp0E9KMor5JPxL5L00/ZKMVfNvovwls1wedzsXLGBz+57FVtu\nJeT+YxIYOvlqHo//C3kHsmsxe2e7d+oTLPlmBVGRzfjozRmBTsfxLnhgNF0GxVOUV8ic8TNI/Hl7\npZjRsyf6rkW3mx0rf+XT0mvxD8/eSvMOcQCERjQmPzOH5xIm1fIR1L6wgb2JmXwTuFxkvP85abPe\nq7DfBAURO/1OQk/uTEl6JnvHPUrxnhTwuImdcjuh3TuC203mx4tIm/kuJjiItm/+HRMchHG7yZr/\nNanPvBmgo6s94Wf3pM2DN2LcLlL/vYDk5+dU2G+CPbR78g7CTu1I8YEsto/9O4W7U3A3C6f9jImE\n9ehE2nuL2X3/zLL3RF50JjG3XAYWipLT2H7bE5QcyKrtQwuYax/8Mz0H9aYgr4AXxj/Ntp+2Voq5\n/99TiGwZSWF+IQCPjHqQzNQMzr7sXP406RrSktIAmPf6f1n874W1mn+d0oDvTFDvG2qdBvUgqn0s\n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\nJT4kEREREYGmE7Wa2hfOuage9SkiIiLJprs+t+0AMyv1XxuQ5b/Xsz5FREREEmy7iZpzLpysQERE\nREQaoycTiIiIiEjgNPuh7CIiIiKp0Jbv+lRFTURERCSgVFETERGRQGvLTyZQRU1EREQkoFRRExER\nkUDTOGoiIiIiAaXhOUREREQkcFRRExERkUDT8BwiIiIiEjiqqImIiEigaXgOEREREQkcVdREREQk\n0NRHTUREREQCJ+EVtfy+5Yn+Fa3eJZ9kpDqEVuH2jutSHUKLVzKnJtUhtArpH52X6hBavE7P/jnV\nIUgSaRw1EREREQkc9VETERGRQIvrrk8RERERCRpV1ERERCTQ2m49TRU1ERERkcBSRU1EREQCTeOo\niYiIiEjgqKImIiIigaaKmoiIiIgEjipqIiIiEmhO46iJiIiISNCooiYiIiKB1pb7qClRExERkUDT\nQ9lFREREJHBUURMREZFA080EIiIiIhI4qqiJiIhIoLXlmwlUURMREREJKFXUREREJNDUR01ERERE\nAkcVNREREQk09VETERERkcBRRU1EREQCTU8mEBEREZHAUUVNREREAi2uuz5FREREJGhUURMREZFA\nUx81EREREQkcJWoiIiISaHHnEv6zI8yss5nNMLNl/r+dttHuLjP7zMwWm9n9ZmZNrVuJmoiIiMiO\n+TUw0znXF5jpv6/HzA4BDgX2B/YFhgBHNrViJWoiIiISaC4J/+2gk4En/ddPAqMa3QzIBNKBDCAN\nKGhqxUrURERERHZMN+fcGgD/367fbeCcexeYDazxf6Y55xY3tWLd9SkiIiKBloxx1MxsNDC6zqQp\nzrkpdea/DnRvZNHxzVz/HsBewC7+pBlmdoRzbs72llOiJiIiIm2en5RN2c78Y7c1z8wKzKyHc26N\nmfUAChtp9lPgPefcZn+ZV4GDge0marr0KSIiIoHWAvqovQKc478+B/hnI22+AY40s4iZpeHdSNC2\nL32mDRxKu4suh1CIyhn/ofKFp+vNzzz5NDKOOxFiMVxpCZvvm0x8ndevL9SlK+0uv55Qfldwjk23\n3kC8cG0qNiMQzp1wIQcePYiqiioevvZ+vvr0ywZtbnnmNjp17UR1ZTUAt589gdLijRx56nB+ceM5\nrF+7HoBpT/2HWc+8ntT4UyH7sMHkjxsD4TClL7xKyR+fq98gLY1uk64jY5++xEtKWXv1HURXF0Ba\n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\n+Q2QTU4NAAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0xbde7438>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "#画出相关性热力图\n",
    "a = plt.subplots(figsize=(15,9))#调整画布大小\n",
    "a = sns.heatmap(train_corr, vmin=-1, vmax=1 , annot=True , square=True)#画热力图"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 2)各个数据与结果的关系\n",
    "进一步探索分析各个数据与结果的关系"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "##### ①Pclass,乘客等级,1是最高级\n",
    "结果分析:可以看出Survived和Pclass在Pclass=1的时候有较强的相关性（>0.5），所以最终模型中包含该特征。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Pclass</th>\n",
       "      <th>Survived</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Pclass</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1.0</td>\n",
       "      <td>0.629630</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>2.0</td>\n",
       "      <td>0.472826</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>3.0</td>\n",
       "      <td>0.242363</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "        Pclass  Survived\n",
       "Pclass                  \n",
       "1          1.0  0.629630\n",
       "2          2.0  0.472826\n",
       "3          3.0  0.242363"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train.groupby(['Pclass'])['Pclass','Survived'].mean()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.axes._subplots.AxesSubplot at 0xc33fa90>"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0xc8761d0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "train[['Pclass','Survived']].groupby(['Pclass']).mean().plot.bar()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "##### ②Sex,性别\n",
    "结果分析:女性有更高的活下来的概率（74%）,保留该特征"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Survived</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Sex</th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>female</th>\n",
       "      <td>0.742038</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>male</th>\n",
       "      <td>0.188908</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "        Survived\n",
       "Sex             \n",
       "female  0.742038\n",
       "male    0.188908"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train.groupby(['Sex'])['Sex','Survived'].mean()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.axes._subplots.AxesSubplot at 0x105c4b630>"
      ]
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1149c59e8>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "train[['Sex','Survived']].groupby(['Sex']).mean().plot.bar()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "##### ③SibSp and Parch  兄妹配偶数/父母子女数\n",
    "结果分析:这些特征与特定的值没有相关性不明显，最好是由这些独立的特征派生出一个新特征或者一组新特征"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Survived</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>SibSp</th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0.345395</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>0.535885</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>0.464286</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>0.250000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>0.166667</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>0.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>0.000000</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "       Survived\n",
       "SibSp          \n",
       "0      0.345395\n",
       "1      0.535885\n",
       "2      0.464286\n",
       "3      0.250000\n",
       "4      0.166667\n",
       "5      0.000000\n",
       "8      0.000000"
      ]
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train[['SibSp','Survived']].groupby(['SibSp']).mean()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {
    "slideshow": {
     "slide_type": "-"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.axes._subplots.AxesSubplot at 0x1144385c0>"
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXcAAAEGCAYAAACevtWaAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMS4xLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvAOZPmwAAFBVJREFUeJzt3X+QXWd93/H3xyv5R5AxHUtljH54NbVIcGOj4LUN40JVwg95zMhpYyObqRtaQGBHoJZMJoJgl7rQAYcmw7iewZqEmGZs5B9MU8WouIFgGn5GkisDkhAWxqnWoxBZNmZkbCThb//YK2VZVtq72ru62of3a0bjc57z3HO/d7372bPPOec5qSokSW05pd8FSJJ6z3CXpAYZ7pLUIMNdkhpkuEtSgwx3SWqQ4S5JDTLcJalBhrskNWhWv9547ty5NTg42K+3l6QZacuWLU9U1byJ+vUt3AcHB9m8eXO/3l6SZqQkf9tNP4dlJKlBhrskNchwl6QG9W3MXVL7Dh48yPDwMM8991y/S5lxTj/9dBYsWMDs2bOP6/WGu6RpMzw8zJlnnsng4CBJ+l3OjFFV7Nu3j+HhYRYvXnxc++hqWCbJ8iQ7k+xKsvYofd6cZHuSbUnuOq5qJDXlueee4+yzzzbYJykJZ5999pT+4pnwyD3JAHAb8HpgGNiUZENVbR/VZwnwPuCyqnoqyT8+7ookNcVgPz5T/bp1c+R+CbCrqh6tqgPAeuDKMX3eAdxWVU8BVNXfT6kqSdKUdDPmPh/YPWp9GLh0TJ+XAiT5CjAAfLCqPjd2R0lWAasAFi1adDz1SsdlcO1np23fj33kimnbd2t6/f+h26/9hz/8Ye666y4GBgY45ZRTuP3227n00rExNjkbNmxg+/btrF077kj1pMyZM4f9+/dPeT+j9eqE6ixgCbAMWAD8nyQXVNUPR3eqqnXAOoChoSGfzC1p2n3ta1/j/vvv56GHHuK0007jiSee4MCBA1299tChQ8yaNX5MrlixghUrVvSy1J7qZljmcWDhqPUFnbbRhoENVXWwqr4PfJeRsJekvtqzZw9z587ltNNOA2Du3Lm85CUvYXBwkCeeeAKAzZs3s2zZMgA++MEPct1113HZZZdx3XXX8cpXvpJt27Yd2d+yZcvYvHkzd9xxB6tXr+bpp5/m3HPP5fnnnwfgmWeeYeHChRw8eJDvfe97LF++nIsuuohXv/rVfOc73wHg+9//Pq961au44IIL+MAHPjAtn7ubcN8ELEmyOMmpwDXAhjF9/pyRo3aSzGVkmObRHtYpScflDW94A7t37+alL30pN9xwA1/60pcmfM327dv5/Oc/z6c//WlWrlzJPffcA4z8otizZw9DQ0NH+p511lksXbr0yH7vv/9+3vjGNzJ79mxWrVrFrbfeypYtW/jYxz7GDTfcAMCaNWu4/vrr+da3vsU555wzDZ+6i3CvqkPAauABYAdwT1VtS3JzksN/kzwA7EuyHfgi8LtVtW9aKpakSZgzZw5btmxh3bp1zJs3j5UrV3LHHXcc8zUrVqzgjDPOAODNb34z9913HwD33HMPV1111c/1X7lyJXfffTcA69evZ+XKlezfv5+vfvWrXH311SxdupR3vvOd7NmzB4CvfOUrXHvttQBcd911vfqoP6OrMfeq2ghsHNN206jlAt7b+SdJJ5WBgQGWLVvGsmXLuOCCC/jUpz7FrFmzjgyljL2e/AUveMGR5fnz53P22WfzzW9+k7vvvptPfOITP7f/FStW8P73v58nn3ySLVu28NrXvpZnnnmGF73oRWzdunXcmqb7ElHnlpHUtJ07d/LII48cWd+6dSvnnnsug4ODbNmyBYDPfOYzx9zHypUrueWWW3j66ae58MILf277nDlzuPjii1mzZg1vetObGBgY4IUvfCGLFy/m3nvvBUbuOn344YcBuOyyy1i/fj0Ad955Z08+51hOPyDphOnHZaP79+/n3e9+Nz/84Q+ZNWsW5513HuvWrWPHjh287W1v48YbbzxyMvVorrrqKtasWcONN9541D4rV67k6quv5sEHHzzSduedd3L99dfzoQ99iIMHD3LNNdfw8pe/nI9//OO85S1v4aMf/ShXXjn2tqHeyMiIyok3NDRUPqxDJ4rXuffHjh07eNnLXtbvMmas8b5+SbZU1dBRXnKEwzKS1CDDXZIaZLhLmlb9Gvqd6ab6dTPcJU2b008/nX379hnwk3R4PvfTTz/9uPfh1TKSps2CBQsYHh5m7969/S5lxjn8JKbjZbhLmjazZ88+7icJaWoclpGkBhnuktQgh2VOkOm8iQa8kUbSz/LIXZIaZLhLUoMMd0lqkOEuSQ0y3CWpQYa7JDXIcJekBhnuktQgw12S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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x113cc3eb8>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "train[['Parch','Survived']].groupby(['Parch']).mean().plot.bar()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "##### ④Age年龄与生存情况的分析.\n",
    "结果分析:由图,可以看到年龄是影响生存情况的. \n",
    "\n",
    "但是年龄是有大部分缺失值的,缺失值需要进行处理,可以使用填充或者模型预测."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<seaborn.axisgrid.FacetGrid at 0xc5f7cf8>"
      ]
     },
     "execution_count": 16,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n5Kp6UJL/muT7kjw1ycVV9dRlFQbA1vRigOU7lRHk85J8uLv/orv/Jskbkjx/OWUBsE16McCSVXfv\n7IlVFyW5oLt/Yrr/o0m+rbtffNJ6R5Mcne4+OckHH+CmHpvk7h0VuXvmVtPc6knmV9Pc6knUtB1z\nqyfZeU13d/cFyy5mH/fiudWTzK+mudWTqGk75lZPsrdq2lYvPpUz6dUGy74ibXf35Uku3/FGqm7q\n7iM7ff5umFtNc6snmV9Nc6snUdN2zK2eZJY17ctePLd6kvnVNLd6EjVtx9zqSfZnTadyiMUdSc4e\n7j8hySdOrRwAHiC9GGDJTiUg/1GSJ1XVE6vqwUlemOSq5ZQFwDbpxQBLtuNDLLr7nqp6cZJ3JnlQ\nktd1921Lq+w+O/5KcBfNraa51ZPMr6a51ZOoaTvmVk8ys5r2cS+eWz3J/GqaWz2JmrZjbvUk+7Cm\nHf9IDwAA9iJn0gMAgIGADAAAg9kG5DmcOrWqXldVd1XVrcOyR1fVdVX1oen6USuu6eyquqGqbq+q\n26rqJeusq6q+uqreU1Xvm+p5xbT8iVV141TPG6cfD61UVT2oqv64qq6eQ01VdbyqPlBVt1TVTdOy\nte1PVfXIqnpLVf3ptD89a831PHl6b05cvlBVL11zTf922q9vrarXT/v72vftVdKLN6xnVn142vYs\ne7E+vK2aZtOL59iHp7pW3otnGZBrPqdOvSLJyZNJH0tyfXc/Kcn10/1VuifJy7r7KUmemeRF03uz\nrrq+lOQ53f20JOckuaCqnpnklUleNdXz2SSXrqie0UuS3D7cn0NN39Xd5wxzN65zf/rVJNd29zcm\neVoW79Xa6unuD07vzTlJzk3yf5O8fV01VdXjk/ybJEe6+5uz+AHcCzOP/Wgl9OJNza0PJ/Ptxfrw\n1mbTi+fWh5M19uLunt0lybOSvHO4/zNJfmZNtRxOcutw/4NJzppun5Xkg2t+r96R5HvmUFeShyZ5\nb5Jvy+LsNgc2+jxXVMsTsvgjfk6Sq7M4mcK6azqe5LEnLVvL55bk7yX5SKYf6q67ng3q+94kf7Dm\n9+jxST6W5NFZzPhzdZJ/su79aMWfg168vdpm04enbc+iF+vD26pntr14Dn142t5aevEsR5Bz35tx\nwh3Tsjl4XHffmSTT9deuq5CqOpzk6UluXGdd01dotyS5K8l1Sf48yee6+55plXV8fr+S5KeTfHm6\n/5gZ1NRJ3lVVN9fitL/J+j63r0/y6ST/ffr6879V1cPWWM/JXpjk9dPttdTU3R9P8otJPprkziSf\nT3Jz1r8frZJevIW59OGplrn1Yn14a3PuxWvvw9P21tKL5xqQt3Xq1P2sqs5M8tYkL+3uL6yzlu6+\ntxdfxzwhyXlJnrLRaquqp6q+P8ld3X3zuHiDVVe9T53f3c/I4uvqF1XVd654+6MDSZ6R5DXd/fQk\nf53Vf624oek4sh9I8uY11/GoJM9P8sQkX5fkYVl8difby71pDn83szWnPpzMqxfrw9s2y148lz48\n1bKWXjzXgDznU6d+qqrOSpLp+q5VF1BVZ2TRlH+ru982l7q6+3NJ3p3FMXmPrKoTJ6JZ9ed3fpIf\nqKrjSd6Qxdd7v7LmmtLdn5iu78rimK7zsr7P7Y4kd3T3jdP9t2TRpNe+H2XR+N7b3Z+a7q+rpu9O\n8pHu/nR3/22StyX59qx5P1oxvXgTc+3DyWx6sT68PXPtxXPpw8maevFcA/KcT516VZJLptuXZHHs\n2cpUVSV5bZLbu/uX111XVR2sqkdOt78mix359iQ3JLlo1fUkSXf/THc/obsPZ7Hv/E53/8g6a6qq\nh1XVw0/czuLYrluzps+tuz+Z5GNV9eRp0XOT/Mm66jnJxbnva71kfTV9NMkzq+qh09/difdobfvR\nGujFG5hbH55qmlUv1oe3Z8a9eC59OFlXL17VQdY7OCj7eUn+LItjqH5uTTW8PovjXf42i//LuzSL\nY6iuT/Kh6frRK67pH2XxNcL7k9wyXZ63rrqSfEuSP57quTXJv5+Wf32S9yT5cBZf0TxkTZ/hs5Nc\nve6apm2/b7rcdmKfXuf+lMUv3W+aPrv/meRRM9i/H5rkL5M8Yli2zvfoFUn+dNq3fzPJQ+ayb6/w\nPdCLv7KeWfXhqabZ9mJ9eMu6ZtWL59aHp+2vvBc71TQAAAzmeogFAACshYAMAAADARkAAAYCMgAA\nDARkAAAYCMjsKVX1g1XVVfWN664FYD/Sh9kLBGT2mouT/H4WE9MDsHr6MKc9AZk9o6rOzOL0ppdm\nasxV9VVV9eqquq2qrq6q366qi6bHzq2q/11VN1fVO0+cRhOAndGH2SsEZPaSFyS5trv/LMlnquoZ\nSf5ZksNJ/mGSn0jyrCSpqjOS/OckF3X3uUlel+Q/rqNogD1EH2ZPOLDuAmCJLk7yK9PtN0z3z0jy\n5u7+cpJPVtUN0+NPTvLNSa5bnNo9D8riVLYA7Jw+zJ4gILMnVNVjkjwnyTdXVWfRaDvJ2zd7SpLb\nuvtZKyoRYE/Th9lLHGLBXnFRkt/o7r/f3Ye7++wkH0lyd5Ifmo6Be1ySZ0/rfzDJwar6u6/6quqb\n1lE4wB6hD7NnCMjsFRfnK0cp3prk65LckeTWJL+W5MYkn+/uv8mimb+yqt6X5JYk3766cgH2HH2Y\nPaO6e901wK6qqjO7+4vT13/vSXJ+d39y3XUB7Bf6MKcbxyCzH1xdVY9M8uAkv6ApA6ycPsxpxQgy\nAAAMHIMMAAADARkAAAYCMgAADARkAAAYCMgAADD4/y0rwun4BmfPAAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0xc5f76d8>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "g = sns.FacetGrid(train, col='Survived',size=5)\n",
    "g.map(plt.hist, 'Age', bins=40)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.axes._subplots.AxesSubplot at 0xc71ac18>"
      ]
     },
     "execution_count": 17,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\nRK5CYII=\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0xc7a7a58>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "train.groupby(['Age'])['Survived'].mean().plot()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "##### ⑤Embarked登港港口与生存情况的分析\n",
    "结果分析:C地的生存率更高,这个也应该保留为模型特征."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.axes._subplots.AxesSubplot at 0xca1e5f8>"
      ]
     },
     "execution_count": 18,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\negAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x59b99e8>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "sns.countplot('Embarked',hue='Survived',data=train)"
   ]
  },
  {
   "cell_type": "raw",
   "metadata": {},
   "source": [
    "⑥其他因素\n",
    "*在数据的Name项中包含了对该乘客的称呼，如Mr、Miss等，这些信息包含了乘客的年龄、性别、也有可能包含社会地位，如Dr、Lady、Major、Master等称呼。这一项不方便用图表展示，但是在特征工程中，我们会将其提取出来,然后放到模型中。\n",
    "\n",
    "*剩余因素还有船票价格、船舱号和船票号，这三个因素都可能会影响乘客在船中的位置从而影响逃生顺序，但是因为这三个因素与生存之间看不出明显规律，所以在后期模型融合时，将这些因素交给模型来决定其重要性。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 三.特征工程\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [],
   "source": [
    "#先将数据集合并,一起做特征工程(注意,标准化的时候需要分开处理)\n",
    "#先将test补齐,然后通过pd.apped()合并\n",
    "test['Survived'] = 0\n",
    "train_test = train.append(test)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": true
   },
   "source": [
    "### ①Pclass,乘客等级,1是最高级\n",
    "两种方式:一是该特征不做处理,可以直接保留.二是再处理:也进行分列处理(比较那种方式模型效果更好,就选那种)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {},
   "outputs": [],
   "source": [
    "train_test = pd.get_dummies(train_test,columns=['Pclass'])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### ②Sex,性别¶\n",
    "无缺失值,直接分列"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {},
   "outputs": [],
   "source": [
    "train_test = pd.get_dummies(train_test,columns=[\"Sex\"])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### ③SibSp and Parch  兄妹配偶数/父母子女数\n",
    "第一次直接保留:这两个都影响生存率,且都是数值型,先直接保存.\n",
    "\n",
    "第二次进行两项求和,并进行分列处理.(兄妹配偶数和父母子女数都是认识人的数量,所以总数可能也会更好)(模型结果提高到了)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {},
   "outputs": [],
   "source": [
    "#这是剑豪模型后回来添加的新特征,模型的分数最终有所提高了.\n",
    "train_test['SibSp_Parch'] = train_test['SibSp'] + train_test['Parch']"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {},
   "outputs": [],
   "source": [
    "train_test = pd.get_dummies(train_test,columns = ['SibSp','Parch','SibSp_Parch']) "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### ④Embarked \n",
    "数据有极少量(3个)缺失值,但是在分列的时候,缺失值的所有列可以均为0,所以可以考虑不填充.\n",
    "\n",
    "另外,也可以考虑用测试集众数来填充.先找出众数,再采用df.fillna()方法"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {},
   "outputs": [],
   "source": [
    "train_test = pd.get_dummies(train_test,columns=[\"Embarked\"])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": true
   },
   "source": [
    "### ⑤ Name\n",
    "1.在数据的Name项中包含了对该乘客的称呼,将这些关键词提取出来,然后做分列处理.(参考别人的)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/Users/jiangzl/.virtualenvs/python3.6/lib/python3.6/site-packages/ipykernel_launcher.py:2: FutureWarning: currently extract(expand=None) means expand=False (return Index/Series/DataFrame) but in a future version of pandas this will be changed to expand=True (return DataFrame)\n",
      "  \n"
     ]
    }
   ],
   "source": [
    "#从名字中提取出称呼： df['Name].str.extract()是提取函数,配合正则一起使用\n",
    "train_test['Name1'] = train_test['Name'].str.extract('.+,(.+)').str.extract( '^(.+?)\\.').str.strip()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "metadata": {},
   "outputs": [],
   "source": [
    "#将姓名分类处理()\n",
    "train_test['Name1'].replace(['Capt', 'Col', 'Major', 'Dr', 'Rev'], 'Officer' , inplace = True)\n",
    "train_test['Name1'].replace(['Jonkheer', 'Don', 'Sir', 'the Countess', 'Dona', 'Lady'], 'Royalty' , inplace = True)\n",
    "train_test['Name1'].replace(['Mme', 'Ms', 'Mrs'], 'Mrs')\n",
    "train_test['Name1'].replace(['Mlle', 'Miss'], 'Miss')\n",
    "train_test['Name1'].replace(['Mr'], 'Mr' , inplace = True)\n",
    "train_test['Name1'].replace(['Master'], 'Master' , inplace = True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "metadata": {},
   "outputs": [],
   "source": [
    "#分列处理\n",
    "train_test = pd.get_dummies(train_test,columns=['Name1'])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "##### 从姓名中提取出姓做特征"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "metadata": {},
   "outputs": [],
   "source": [
    "#从姓名中提取出姓\n",
    "train_test['Name2'] = train_test['Name'].apply(lambda x: x.split('.')[1])\n",
    "\n",
    "#计算数量,然后合并数据集\n",
    "Name2_sum = train_test['Name2'].value_counts().reset_index()\n",
    "Name2_sum.columns=['Name2','Name2_sum']\n",
    "train_test = pd.merge(train_test,Name2_sum,how='left',on='Name2')\n",
    "\n",
    "#由于出现一次时该特征时无效特征,用one来代替出现一次的姓\n",
    "train_test.loc[train_test['Name2_sum'] == 1 , 'Name2_new'] = 'one'\n",
    "train_test.loc[train_test['Name2_sum'] > 1 , 'Name2_new'] = train_test['Name2']\n",
    "del train_test['Name2']\n",
    "\n",
    "#分列处理\n",
    "train_test = pd.get_dummies(train_test,columns=['Name2_new'])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "metadata": {},
   "outputs": [],
   "source": [
    "#删掉姓名这个特征\n",
    "del train_test['Name']"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### ⑥ Fare\n",
    "该特征有缺失值,先找出缺失值的那调数据,然后用平均数填充"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Age</th>\n",
       "      <th>Cabin</th>\n",
       "      <th>Fare</th>\n",
       "      <th>PassengerId</th>\n",
       "      <th>Survived</th>\n",
       "      <th>Ticket</th>\n",
       "      <th>Pclass_1</th>\n",
       "      <th>Pclass_2</th>\n",
       "      <th>Pclass_3</th>\n",
       "      <th>Sex_female</th>\n",
       "      <th>...</th>\n",
       "      <th>Name2_new_ Thomas Henry</th>\n",
       "      <th>Name2_new_ Victor</th>\n",
       "      <th>Name2_new_ Washington</th>\n",
       "      <th>Name2_new_ William</th>\n",
       "      <th>Name2_new_ William Edward</th>\n",
       "      <th>Name2_new_ William Henry</th>\n",
       "      <th>Name2_new_ William James</th>\n",
       "      <th>Name2_new_ William John</th>\n",
       "      <th>Name2_new_ William Thomas</th>\n",
       "      <th>Name2_new_one</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>1043</th>\n",
       "      <td>60.5</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>1044</td>\n",
       "      <td>0</td>\n",
       "      <td>3701</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>1 rows × 137 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "       Age Cabin  Fare  PassengerId  Survived Ticket  Pclass_1  Pclass_2  \\\n",
       "1043  60.5   NaN   NaN         1044         0   3701         0         0   \n",
       "\n",
       "      Pclass_3  Sex_female      ...        Name2_new_ Thomas Henry  \\\n",
       "1043         1           0      ...                              0   \n",
       "\n",
       "      Name2_new_ Victor  Name2_new_ Washington  Name2_new_ William  \\\n",
       "1043                  0                      0                   0   \n",
       "\n",
       "      Name2_new_ William Edward  Name2_new_ William Henry  \\\n",
       "1043                          0                         0   \n",
       "\n",
       "      Name2_new_ William James  Name2_new_ William John  \\\n",
       "1043                         0                        0   \n",
       "\n",
       "      Name2_new_ William Thomas  Name2_new_one  \n",
       "1043                          0              0  \n",
       "\n",
       "[1 rows x 137 columns]"
      ]
     },
     "execution_count": 34,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#从上面的分析,发现该特征train集无miss值,test有一个缺失值,先查看\n",
    "train_test.loc[train_test[\"Fare\"].isnull()]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Pclass  Embarked\n",
       "1       C           104.718529\n",
       "        Q            90.000000\n",
       "        S            70.364862\n",
       "2       C            25.358335\n",
       "        Q            12.350000\n",
       "        S            20.327439\n",
       "3       C            11.214083\n",
       "        Q            11.183393\n",
       "        S            14.644083\n",
       "Name: Fare, dtype: float64"
      ]
     },
     "execution_count": 36,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#票价与pclass和Embarked有关,所以用train分组后的平均数填充\n",
    "train.groupby(by=[\"Pclass\",\"Embarked\"]).Fare.mean()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 37,
   "metadata": {},
   "outputs": [],
   "source": [
    "#用pclass=3和Embarked=S的平均数14.644083来填充\n",
    "train_test[\"Fare\"].fillna(14.435422,inplace=True)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### ⑦ Ticket\n",
    "该列和名字做类似的处理,先提取,然后分列"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 38,
   "metadata": {},
   "outputs": [],
   "source": [
    "#将Ticket提取字符列\n",
    "#str.isnumeric()  如果S中只有数字字符，则返回True，否则返回False\n",
    "train_test['Ticket_Letter'] = train_test['Ticket'].str.split().str[0]\n",
    "train_test['Ticket_Letter'] = train_test['Ticket_Letter'].apply(lambda x:np.nan if x.isnumeric() else x)\n",
    "train_test.drop('Ticket',inplace=True,axis=1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 39,
   "metadata": {},
   "outputs": [],
   "source": [
    "#分列,此时nan值可以不做处理\n",
    "train_test = pd.get_dummies(train_test,columns=['Ticket_Letter'],drop_first=True)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": true
   },
   "source": [
    "### ⑧ Age\n",
    "1.该列有大量缺失值,考虑用一个回归模型进行填充.\n",
    "\n",
    "2.在模型修改的时候,考虑到年龄缺失值可能影响死亡情况,用年龄是否缺失值来构造新特征"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 40,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.19771863117870722"
      ]
     },
     "execution_count": 40,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "\"\"\"这是模型就好后回来增加的新特征\n",
    "考虑年龄缺失值可能影响死亡情况,数据表明,年龄缺失的死亡率为0.19.\"\"\"\n",
    "train_test.loc[train_test[\"Age\"].isnull()]['Survived'].mean()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 41,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 所以用年龄是否缺失值来构造新特征\n",
    "train_test.loc[train_test[\"Age\"].isnull() ,\"age_nan\"] = 1\n",
    "train_test.loc[train_test[\"Age\"].notnull() ,\"age_nan\"] = 0\n",
    "train_test = pd.get_dummies(train_test,columns=['age_nan'])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 利用其他组特征量，采用机器学习算法来预测Age"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 42,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "Int64Index: 1309 entries, 0 to 1308\n",
      "Columns: 187 entries, Age to age_nan_1.0\n",
      "dtypes: float64(2), int64(3), object(1), uint8(181)\n",
      "memory usage: 343.0+ KB\n"
     ]
    }
   ],
   "source": [
    "train_test.info()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 43,
   "metadata": {},
   "outputs": [],
   "source": [
    "#创建没有['Age','Survived']的数据集\n",
    "missing_age = train_test.drop(['Survived','Cabin'],axis=1)\n",
    "#将Age完整的项作为训练集、将Age缺失的项作为测试集。\n",
    "missing_age_train = missing_age[missing_age['Age'].notnull()]\n",
    "missing_age_test = missing_age[missing_age['Age'].isnull()]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 44,
   "metadata": {},
   "outputs": [],
   "source": [
    "#构建训练集合预测集的X和Y值\n",
    "missing_age_X_train = missing_age_train.drop(['Age'], axis=1)\n",
    "missing_age_Y_train = missing_age_train['Age']\n",
    "missing_age_X_test = missing_age_test.drop(['Age'], axis=1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 45,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 先将数据标准化\n",
    "from sklearn.preprocessing import StandardScaler\n",
    "ss = StandardScaler()\n",
    "#用测试集训练并标准化\n",
    "ss.fit(missing_age_X_train)\n",
    "missing_age_X_train = ss.transform(missing_age_X_train)\n",
    "missing_age_X_test = ss.transform(missing_age_X_test)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 46,
   "metadata": {},
   "outputs": [],
   "source": [
    "#使用贝叶斯预测年龄\n",
    "from sklearn import linear_model\n",
    "lin = linear_model.BayesianRidge()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 47,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "BayesianRidge(alpha_1=1e-06, alpha_2=1e-06, compute_score=False, copy_X=True,\n",
       "       fit_intercept=True, lambda_1=1e-06, lambda_2=1e-06, n_iter=300,\n",
       "       normalize=False, tol=0.001, verbose=False)"
      ]
     },
     "execution_count": 47,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "lin.fit(missing_age_X_train,missing_age_Y_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 48,
   "metadata": {
    "scrolled": true
   },
   "outputs": [],
   "source": [
    "#利用loc将预测值填入数据集\n",
    "train_test.loc[(train_test['Age'].isnull()), 'Age'] = lin.predict(missing_age_X_test)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 49,
   "metadata": {},
   "outputs": [],
   "source": [
    "#将年龄划分是个阶段10以下,10-18,18-30,30-50,50以上\n",
    "train_test['Age'] = pd.cut(train_test['Age'], bins=[0,10,18,30,50,100],labels=[1,2,3,4,5])\n",
    "\n",
    "train_test = pd.get_dummies(train_test,columns=['Age'])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### ⑨ Cabin\n",
    "cabin项缺失太多，只能将有无Cain首字母进行分类,缺失值为一类,作为特征值进行建模,也可以考虑直接舍去该特征"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 50,
   "metadata": {},
   "outputs": [],
   "source": [
    "#cabin项缺失太多，只能将有无Cain首字母进行分类,缺失值为一类,作为特征值进行建模\n",
    "train_test['Cabin'] = train_test['Cabin'].apply(lambda x:str(x)[0] if pd.notnull(x) else x)\n",
    "train_test = pd.get_dummies(train_test,columns=['Cabin'])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 45,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "#cabin项缺失太多，只能将有无Cain首字母进行分类,\n",
    "train_test.loc[train_test[\"Cabin\"].isnull() ,\"Cabin_nan\"] = 1\n",
    "train_test.loc[train_test[\"Cabin\"].notnull() ,\"Cabin_nan\"] = 0\n",
    "train_test = pd.get_dummies(train_test,columns=['Cabin_nan'])\n",
    "train_test.drop('Cabin',axis=1,inplace=True)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### ⑩ 特征工程处理完了,划分数据集"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 46,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "train_data = train_test[:891]\n",
    "test_data = train_test[891:]\n",
    "train_data_X = train_data.drop(['Survived'],axis=1)\n",
    "train_data_Y = train_data['Survived']\n",
    "test_data_X = test_data.drop(['Survived'],axis=1)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 四 建立模型"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 数据标准化\n",
    "1.线性模型需要用标准化的数据建模,而树类模型不需要标准化的数据\n",
    "\n",
    "2.处理标准化的时候,注意将测试集的数据transform到test集上"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "from sklearn.preprocessing import StandardScaler\n",
    "ss2 = StandardScaler()\n",
    "ss2.fit(train_data_X)\n",
    "train_data_X_sd = ss2.transform(train_data_X)\n",
    "test_data_X_sd = ss2.transform(test_data_X)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 开始建模\n",
    "1.可选单个模型模型有随机森林,逻辑回归,svm,xgboost,gbdt等.\n",
    "\n",
    "2.也可以将多个模型组合起来,进行模型融合,比如voting,stacking等方法\n",
    "\n",
    "3.好的特征决定模型上限,好的模型和参数可以无线逼近上限.\n",
    "\n",
    "4.我测试了多种模型,模型结果最高的随机森林,最高有0.8."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 随机森林"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "from sklearn.ensemble import RandomForestClassifier\n",
    "\n",
    "rf = RandomForestClassifier(n_estimators=150,min_samples_leaf=3,max_depth=6,oob_score=True)\n",
    "rf.fit(train_data_X,train_data_Y)\n",
    "\n",
    "test[\"Survived\"] = rf.predict(test_data_X)\n",
    "RF = test[['PassengerId','Survived']].set_index('PassengerId')\n",
    "RF.to_csv('RF.csv')"
   ]
  },
  {
   "cell_type": "raw",
   "metadata": {},
   "source": [
    "#随机森林是随机选取特征进行建模的,所以每次的结果可能都有点小差异\n",
    "#如果分数足够好,可以将该模型保存起来,下次直接调出来使用0.81339 'rf10.pkl'\n",
    "from sklearn.externals import joblib\n",
    "joblib.dump(rf, 'rf10.pkl')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": true
   },
   "source": [
    "### LogisticRegression"
   ]
  },
  {
   "cell_type": "raw",
   "metadata": {
    "collapsed": true
   },
   "source": [
    "from sklearn.linear_model import LogisticRegression\n",
    "\n",
    "lr = LogisticRegression()\n",
    "\n",
    "from sklearn.grid_search import GridSearchCV\n",
    "\n",
    "param = {'C':[0.001,0.01,0.1,1,10],\"max_iter\":[100,250]}\n",
    "\n",
    "clf = GridSearchCV(lr,param,cv=5,n_jobs=-1,verbose=1,scoring=\"roc_auc\")\n",
    "\n",
    "clf.fit(train_data_X_sd,train_data_Y)\n",
    "\n",
    "#打印参数的得分情况\n",
    "clf.grid_scores_\n",
    "\n",
    "#打印最佳参数\n",
    "clf.best_params_\n",
    "\n",
    "#将最佳参数传入训练模型\n",
    "lr = LogisticRegression(clf.best_params_)\n",
    "\n",
    "lr.fit(train_data_X_sd,train_data_Y)\n",
    "\n",
    "#预测结果\n",
    "lr.predict(test_data_X_sd)\n",
    "\n",
    "#打印结果\n",
    "test[\"Survived\"] = lr.predict(test_data_X_sd)\n",
    "LS = test[['PassengerId','Survived']].set_index('PassengerId')\n",
    "\n",
    "#输出结果\n",
    "LS.to_csv('LS5.csv')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### SVM"
   ]
  },
  {
   "cell_type": "raw",
   "metadata": {},
   "source": [
    "from sklearn import svm\n",
    "svc = svm.SVC()\n",
    "\n",
    "clf = GridSearchCV(svc,param,cv=5,n_jobs=-1,verbose=1,scoring=\"roc_auc\")\n",
    "clf.fit(train_data_X_sd,train_data_Y)\n",
    "\n",
    "clf.best_params_\n",
    "\n",
    "svc = svm.SVC(C=1,max_iter=250)\n",
    "\n",
    "#训练模型并预测结果\n",
    "svc.fit(train_data_X_sd,train_data_Y)\n",
    "svc.predict(test_data_X_sd)\n",
    "\n",
    "#打印结果\n",
    "test[\"Survived\"] = svc.predict(test_data_X_sd)\n",
    "SVM = test[['PassengerId','Survived']].set_index('PassengerId')\n",
    "SVM.to_csv('svm1.csv')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### xgboost"
   ]
  },
  {
   "cell_type": "raw",
   "metadata": {
    "collapsed": true
   },
   "source": [
    "import xgboost as xgb\n",
    "\n",
    "xgb_model = xgb.XGBClassifier(n_estimators=150,min_samples_leaf=3,max_depth=6)\n",
    "\n",
    "xgb_model.fit(train_data_X,train_data_Y)\n",
    "\n",
    "test[\"Survived\"] = xgb_model.predict(test_data_X)\n",
    "XGB = test[['PassengerId','Survived']].set_index('PassengerId')\n",
    "XGB.to_csv('XGB5.csv')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": true
   },
   "source": [
    "### GBDT"
   ]
  },
  {
   "cell_type": "raw",
   "metadata": {
    "collapsed": true
   },
   "source": [
    "from sklearn.ensemble import GradientBoostingClassifier\n",
    "\n",
    "gbdt = GradientBoostingClassifier(learning_rate=0.7,max_depth=6,n_estimators=100,min_samples_leaf=2)\n",
    "\n",
    "gbdt.fit(train_data_X,train_data_Y)\n",
    "\n",
    "test[\"Survived\"] = gbdt.predict(test_data_X)\n",
    "test[['PassengerId','Survived']].set_index('PassengerId').to_csv('gbdt3.csv')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": true
   },
   "source": [
    "### 模型融合voting"
   ]
  },
  {
   "cell_type": "raw",
   "metadata": {
    "collapsed": true
   },
   "source": [
    "from sklearn.ensemble import VotingClassifier\n",
    "\n",
    "from sklearn.linear_model import LogisticRegression\n",
    "lr = LogisticRegression(C=0.1,max_iter=100)\n",
    "\n",
    "import xgboost as xgb\n",
    "xgb_model = xgb.XGBClassifier(max_depth=6,min_samples_leaf=2,n_estimators=100,num_round = 5)\n",
    "\n",
    "from sklearn.ensemble import RandomForestClassifier\n",
    "rf = RandomForestClassifier(n_estimators=200,min_samples_leaf=2,max_depth=6,oob_score=True)\n",
    "\n",
    "from sklearn.ensemble import GradientBoostingClassifier\n",
    "gbdt = GradientBoostingClassifier(learning_rate=0.1,min_samples_leaf=2,max_depth=6,n_estimators=100)\n",
    "\n",
    "vot = VotingClassifier(estimators=[('lr', lr), ('rf', rf),('gbdt',gbdt),('xgb',xgb_model)], voting='hard')\n",
    "\n",
    "vot.fit(train_data_X_sd,train_data_Y)\n",
    "\n",
    "vot.predict(test_data_X_sd)\n",
    "\n",
    "test[\"Survived\"] = vot.predict(test_data_X_sd)\n",
    "test[['PassengerId','Survived']].set_index('PassengerId').to_csv('vot5.csv')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 模型融合stacking"
   ]
  },
  {
   "cell_type": "raw",
   "metadata": {},
   "source": [
    "#划分train数据集,调用代码,把数据集名字转成和代码一样\n",
    "X = train_data_X_sd\n",
    "X_predict = test_data_X_sd\n",
    "y = train_data_Y\n",
    "\n",
    "'''模型融合中使用到的各个单模型'''\n",
    "from sklearn.linear_model import LogisticRegression\n",
    "from sklearn import svm\n",
    "import xgboost as xgb\n",
    "from sklearn.ensemble import RandomForestClassifier\n",
    "from sklearn.ensemble import GradientBoostingClassifier\n",
    "\n",
    "clfs = [LogisticRegression(C=0.1,max_iter=100),\n",
    "        xgb.XGBClassifier(max_depth=6,n_estimators=100,num_round = 5),\n",
    "        RandomForestClassifier(n_estimators=100,max_depth=6,oob_score=True),\n",
    "        GradientBoostingClassifier(learning_rate=0.3,max_depth=6,n_estimators=100)]\n",
    "\n",
    "#创建n_folds\n",
    "from sklearn.cross_validation import StratifiedKFold\n",
    "n_folds = 5\n",
    "skf = list(StratifiedKFold(y, n_folds))\n",
    "\n",
    "#创建零矩阵\n",
    "dataset_blend_train = np.zeros((X.shape[0], len(clfs)))\n",
    "dataset_blend_test = np.zeros((X_predict.shape[0], len(clfs)))\n",
    "\n",
    "#建立模型\n",
    "for j, clf in enumerate(clfs):\n",
    "    '''依次训练各个单模型'''\n",
    "    # print(j, clf)\n",
    "    dataset_blend_test_j = np.zeros((X_predict.shape[0], len(skf)))\n",
    "    for i, (train, test) in enumerate(skf):\n",
    "        '''使用第i个部分作为预测，剩余的部分来训练模型，获得其预测的输出作为第i部分的新特征。'''\n",
    "        # print(\"Fold\", i)\n",
    "        X_train, y_train, X_test, y_test = X[train], y[train], X[test], y[test]\n",
    "        clf.fit(X_train, y_train)\n",
    "        y_submission = clf.predict_proba(X_test)[:, 1]\n",
    "        dataset_blend_train[test, j] = y_submission\n",
    "        dataset_blend_test_j[:, i] = clf.predict_proba(X_predict)[:, 1]\n",
    "    '''对于测试集，直接用这k个模型的预测值均值作为新的特征。'''\n",
    "    dataset_blend_test[:, j] = dataset_blend_test_j.mean(1)\n",
    "\n",
    "# 用建立第二层模型\n",
    "clf2 = LogisticRegression(C=0.1,max_iter=100)\n",
    "clf2.fit(dataset_blend_train, y)\n",
    "y_submission = clf2.predict_proba(dataset_blend_test)[:, 1]\n",
    "\n",
    "\n",
    "test = pd.read_csv(\"test.csv\")\n",
    "test[\"Survived\"] = clf2.predict(dataset_blend_test)\n",
    "test[['PassengerId','Survived']].set_index('PassengerId').to_csv('stack3.csv')"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
